// 地点标签相关工具函数

/**
 * 格式化地点信息为标签文本
 * @param {Object} location - 地点对象
 * @returns {string} 格式化后的标签文本
 */
export function formatLocationTag(location) {
  if (!location || !location.name) return '';
  return `📍 ${location.name}`;
}

/**
 * 解析文本中的地点标签
 * @param {string} text - 包含地点标签的文本
 * @returns {Object|null} 解析出的地点信息，或null
 */
export function parseLocationFromText(text) {
  if (!text) return null;
  
  // 匹配以📍开头的地点标签格式
  const locationMatch = text.match(/📍\s+([^\n\s]+)/);
  if (locationMatch && locationMatch[1]) {
    return {
      name: locationMatch[1]
      // 注意：这里只能解析出地点名称，地址等其他信息需要额外存储
    };
  }
  
  return null;
}

/**
 * 从文本中移除地点标签
 * @param {string} text - 包含地点标签的文本
 * @returns {string} 移除地点标签后的文本
 */
export function removeLocationTag(text) {
  if (!text) return '';
  return text.replace(/\n*📍\s+[^\n]+\n*/g, '').trim();
}

/**
 * 向文本中添加地点标签
 * @param {string} text - 原始文本
 * @param {Object} location - 地点对象
 * @returns {string} 添加地点标签后的文本
 */
export function addLocationTag(text, location) {
  if (!location || !location.name) return text;
  
  // 首先移除可能存在的地点标签
  let cleanText = removeLocationTag(text || '');
  
  // 添加新的地点标签到文本末尾
  const locationTag = formatLocationTag(location);
  return cleanText ? `${cleanText}\n${locationTag}` : locationTag;
}

/**
 * 保存最近使用的地点到localStorage
 * @param {Object} location - 地点对象
 */
export function saveRecentLocation(location) {
  if (!location || !location.id || !location.name) return;
  
  try {
    // 获取现有最近地点
    let recentLocations = JSON.parse(localStorage.getItem('recentLocations') || '[]');
    
    // 移除已存在的相同地点
    recentLocations = recentLocations.filter(loc => loc.id !== location.id);
    
    // 添加到开头
    recentLocations.unshift({ ...location });
    
    // 限制数量
    if (recentLocations.length > 10) {
      recentLocations = recentLocations.slice(0, 10);
    }
    
    localStorage.setItem('recentLocations', JSON.stringify(recentLocations));
  } catch (error) {
    console.error('保存最近地点失败:', error);
  }
}

/**
 * 获取最近使用的地点
 * @returns {Array} 最近使用的地点数组
 */
export function getRecentLocations() {
  try {
    const recentLocations = JSON.parse(localStorage.getItem('recentLocations') || '[]');
    return recentLocations;
  } catch (error) {
    console.error('获取最近地点失败:', error);
    return [];
  }
}

/**
 * 生成热门地点列表
 * @returns {Array} 热门地点数组
 */
export function getPopularLocations() {
  return [
    { id: 1, name: '北京天安门', address: '北京市东城区景山前街4号' },
    { id: 2, name: '上海外滩', address: '上海市黄浦区中山东一路' },
    { id: 3, name: '广州塔', address: '广州市海珠区阅江西路222号' },
    { id: 4, name: '深圳世界之窗', address: '深圳市南山区深南大道9037号' },
    { id: 5, name: '杭州西湖', address: '浙江省杭州市西湖区龙井路1号' },
    { id: 6, name: '成都太古里', address: '成都市锦江区中纱帽街8号' },
    { id: 7, name: '重庆解放碑', address: '重庆市渝中区邹容路100号' },
    { id: 8, name: '武汉黄鹤楼', address: '湖北省武汉市武昌区蛇山西山坡特1号' },
    { id: 9, name: '西安大雁塔', address: '陕西省西安市雁塔区大雁塔南广场' },
    { id: 10, name: '南京夫子庙', address: '江苏省南京市秦淮区贡院街152号' }
  ];
}

/**
 * 搜索地点
 * @param {string} query - 搜索关键词
 * @returns {Array} 搜索结果数组
 */
export function searchLocations(query) {
  if (!query || query.trim() === '') return [];
  
  const popularLocations = getPopularLocations();
  const queryLower = query.toLowerCase().trim();
  
  return popularLocations.filter(location => 
    location.name.toLowerCase().includes(queryLower) ||
    location.address.toLowerCase().includes(queryLower)
  );
}

/**
 * 验证地点数据格式
 * @param {Object} location - 待验证的地点对象
 * @returns {boolean} 是否为有效地点
 */
export function isValidLocation(location) {
  return location && 
         typeof location === 'object' && 
         typeof location.id !== 'undefined' && 
         typeof location.name === 'string' && 
         location.name.trim() !== '';
}

/**
 * 合并地点数据到帖子数据中
 * @param {Object} postData - 帖子数据
 * @param {Object} location - 地点数据
 * @returns {Object} 合并后的帖子数据
 */
export function mergeLocationToPost(postData, location) {
  if (!postData) postData = {};
  
  if (isValidLocation(location)) {
    return {
      ...postData,
      location: {
        id: location.id,
        name: location.name,
        address: location.address || ''
      }
    };
  }
  
  // 如果地点无效，移除location字段
  const { location: _, ...rest } = postData;
  return rest;
}